package cn.tedu.csmall.product.aop;

import lombok.extern.slf4j.Slf4j;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;

@Slf4j
@Aspect
@Component
public class TimerAspect {

    @Around("execution(* cn.tedu.csmall.product.service.*.*(..))")
    public Object timer(ProceedingJoinPoint pjp) throws Throwable{
        log.debug("执行了TimerAspect中的方法...");

        long start=System.currentTimeMillis();
        Object result = pjp.proceed();//执行连接点方法
        long end=System.currentTimeMillis();

        log.debug("[{}]类型的对象调用了[{}]方法,方法的参数值为[{}]",
                pjp.getTarget().getClass().getName(),
                pjp.getSignature().getName(),
                pjp.getArgs());
        log.debug("执行耗时: {}毫秒",end-start);

        return result; //返回调用pjp.proceed()时的结果
    }
}
